package edu.xmut.singleton.lazy;

/**
 * @author 朔风
 * @date 2024-02-16 13:05
 */
public class SingletonTest05 {
    public static void main(String[] args) {
        SingletonInnerClazz instance1 = SingletonInnerClazz.getInstance();
        SingletonInnerClazz instance2 = SingletonInnerClazz.getInstance();

        System.out.println(instance1 == instance2);
        System.out.println(instance1.hashCode());
        System.out.println(instance2.hashCode());


    }
}

/**
 * 懒汉式单利模式（线程安全-静态内部类）
 */
class SingletonInnerClazz {

    // 1.提供一个私有构造器，不允许外部new
    private SingletonInnerClazz() {
    }


    // 2.创建一个静态内部类，当需要时才会被加载
    private static class InnerClazz{
        // 1.静态实例变量
        private static SingletonInnerClazz instance = new SingletonInnerClazz();
    }

    // 3.提供一个获取单利的方法
    public static SingletonInnerClazz getInstance() {
        return InnerClazz.instance;
    }

}
